home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fatted Calf
/
The Fatted Calf.iso
/
Applications
/
DockExtenders
/
Launch
/
Source
/
Main.m
< prev
next >
Wrap
Text File
|
1994-04-29
|
3KB
|
171 lines
/* Generated by Interface Builder */
#import "Main.h"
#import <appkit/Application.h>
#import <appkit/Speaker.h>
#import <appkit/Listener.h>
#import <appkit/Button.h>
#import <appkit/Panel.h>
#import <appkit/Matrix.h>
#import <sys/param.h>
#import <defaults/defaults.h>
#import <string.h>
#import <libc.h>
#define APPNAME "Launch"
@implementation Main
// The application speaker
id speaker=nil;
extern char loginScript[1024];
extern char logoutScript[1024];
// The auto-launching preferences.
int onauto=0;
char *autodefs[]={"ExecuteAndQuit", "Execute", "Ask", "Nothing", NULL};
int logout=0;
char *logoutdefs[]={"Execute", "Ask", "Nothing", NULL};
#define LO_EXECUTE 0
#define LO_ASK 1
#define LO_NOTHING 2
- appDidInit:sender;
{
speaker = [NXApp appSpeaker];
[self readPrefs];
return self;
}
/* If the user logs out/powers off, we get one of these messages.*/
- app:sender powerOffIn:(int)ms andSave:(int)aFlag
{
[self ask:logoutScript];
return self;
}
- powerOff:(NXEvent *)theEvent
{
[self ask:logoutScript];
return self;
}
- testLogout:sender
{
return [self ask:logoutScript];
}
- ask:(char *)script
{
if (logout == LO_ASK)
{
int reply = NXRunAlertPanel("Launch", "Execute script\n%s?", "OK", "No", NULL, script);
if (reply == NX_ALERTDEFAULT) [self execute:script];
}
else
{
if (logout == LO_EXECUTE)
[self execute:script];
}
return self;
}
// Execute the script by forking and overlaying, so Launch stays around.
- execute:(char *)script
{
int pid;
pid = vfork();
// Child executes script.
if (pid==0) execl(script, ".Launch", 0);
return self;
}
- executeLogin:sender
{
return [self execute:loginScript];
}
- executeLogout:sender
{
return [self execute:logoutScript];
}
// Send a message to Edit to open the file.
- open:(char *)script
{
int msgDelivered, fileOpened;
port_t editport;
// Find Edit's port.
editport = NXPortFromName("Edit", NULL);
if (editport==PORT_NULL)
{
// An unlikely event, but you never know.
NXRunAlertPanel(APPNAME, "Cannot get Edit's port.", "OK", NULL, NULL);
[openItem setEnabled:NO];
}
else
{
// Edit is the receiving app.
[speaker setSendPort:editport];
msgDelivered = [speaker openFile:script ok:&fileOpened];
if ((msgDelivered!=0) || (fileOpened==NO))
NXRunAlertPanel(APPNAME, "Cannot open script %s", "OK", NULL, NULL, script);
}
return self;
}
- openLogin:sender
{
return [self open:loginScript];
}
- openLogout:sender
{
return [self open:logoutScript];
}
- readPrefs;
{
char const *def;
int i;
def = NXGetDefaultValue(APPNAME, "OnAutoLaunch");
for (i=0;autodefs[i]!=NULL;i++)
if (strcmp(autodefs[i], def)==0) onauto = i;
def = NXGetDefaultValue(APPNAME, "OnLogout");
for (i=0;logoutdefs[i]!=NULL;i++)
if (strcmp(logoutdefs[i], def)==0) logout = i;
return self;
}
- writePrefs;
{
NXWriteDefault(APPNAME, "OnAutoLaunch", autodefs[onauto]);
NXWriteDefault(APPNAME, "OnLogout", logoutdefs[logout]);
return self;
}
- showPrefs:sender
{
[onautoSwitch selectCellWithTag:onauto];
[logoutSwitch selectCellWithTag:logout];
[prefsPanel makeKeyAndOrderFront:self];
return self;
}
- okPrefs:sender
{
onauto = [[onautoSwitch selectedCell] tag];
logout = [[logoutSwitch selectedCell] tag];
[self writePrefs];
return self;
}
@end